<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $primaryKey = 'post_id';
//    protected $fillable = [];
    protected $guarded = [];
    // 查询数据时需要被转换成Carbon日期时间格式的字段, 默认created_at、updated_at会自动转换
    protected $dates = ['published_at'];

    /**
     * @desc 定义一对一关系模型
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     */
    public function hasOneUser()
    {
        return $this->hasOne('App\User', $foreign_key = 'id', $local_key = 'post_author');
    }

    // 获取最新文章
    /* 范围查询可以让您轻松的重复利用模型的查询逻辑。要设定范围查询，只要定义有 scope 前缀的模型方法 */
    public function scopeRecent($query, $limit = 6) {
        return $query->select(['post_id', 'post_title'])
            ->orderBy($column = 'post_id', 'desc')
            ->limit($limit);
    }

    public function scopeRandom($query, $limit = 6) {
        return $query->select(['post_id', 'post_title'])
            ->orderByRaw($sql = 'RAND()')
            ->limit($limit);
    }

    public function scopeIsApproved($query) {
        return $query->where('post_status', '=', 'public');
    }

    public function scopeLike($query, $keyword) {
        return $query->where('post_title', 'like', "%$keyword%");
    }

    // 使用该model中获取published_at字段时, 自动执行该方法
    // 应注意的是, 这里做了设置之后, 得到的published_at就仅仅是一个字符串, 而不是Carbon格式的时间类型
    public function getPublishedAtAttribute() {
        return date('m/d/Y', strtotime($this->attributes['published_at']));
    }

    // 设置该model中的published_at字段时, 自动执行该方法
    // 不能放置空方法在这里, 否则published_at字段不能赋值
//    public function setPublishedAtAttribute() {
//
//    }

}
